package it.azienda.framework.controllo;
import it.azienda.framework.persistenza.DAOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.BatchUpdateException;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.GenericJDBCException;
import org.firebirdsql.jdbc.FBSQLException;
import javax.faces.context.FacesContext;
import javax.faces.application.FacesMessage;

public class AzioneGestisciEccezioni {
    
    public AzioneGestisciEccezioni() { }
    
    public void gestisciEccezioni(Exception c, FacesContext ctx){
        try{
            if(c.getCause()==null){
                ctx.addMessage(null,new FacesMessage("L'operazione ha generato un errore."+c));
            }else{
                if(c.getCause() instanceof ConstraintViolationException) {
                    ConstraintViolationException co =(ConstraintViolationException ) c.getCause();
                    BatchUpdateException bue = (BatchUpdateException)c.getCause();
                    ctx.addMessage(null, new FacesMessage(bue.getMessage().toString()));
                }else if(c.getCause() instanceof GenericJDBCException) {
                    GenericJDBCException co =(GenericJDBCException) c.getCause();
                    FBSQLException bue = (FBSQLException)co.getCause();
                    ctx.addMessage(null, new FacesMessage(bue.getMessage().toString()));
                }else if(c.getCause() instanceof DAOException) {
                    DAOException co =(DAOException) c.getCause();
                    GenericJDBCException generic = (GenericJDBCException)co.getCause();
                    FBSQLException bue = (FBSQLException)generic.getCause();
                    ctx.addMessage(null, new FacesMessage(bue.getMessage().toString()));
                }else{
                    ctx.addMessage(null,new FacesMessage("Operazione non effettuata."));
                }
            }
        }catch(Exception ex){
            ctx.addMessage(null,new FacesMessage("Operazione non effettuata."));
        }
    }
}
